import { USER_LOGIN_SUCCESS, USER_RESET } from './constants';

// 异步方法
import { loginAsync } from '../api/user';

// antd
import { notification, message } from 'antd'

/**
 * 定义用户登录成功是生成 action 的创建函数
 * @param {*} user
 * @returns
 */
export const loginSuccessAction = (user) => ({
  type: USER_LOGIN_SUCCESS,
  payload: user,
})

export const loginOutAction = () => ({
  type: USER_RESET,
})

/**
 * 定义异步 Action 创建函数，在 action creator 中也可以返回一个函数
 * 该返回的函数会自动被 redux-thunk 中间件调用执行。在 thunk 中间件
 * 调用返回函数执行时，会传递 dispatch 参数
 */
export const loginAsyncAction = (user) => (dispatch) => {
  loginAsync(user)
    .then((data) => {
      // 如果没有查询到匹配用户
      if (data.length === 0) {
        // 提示
        notification['error']({
          message: '登录错误',
          description:
              '请输入正确的账户或密码.',
        })
        // 调用 用户重置
        dispatch({
          type: USER_RESET,
        })
      } else {
        // 提取 姓名 token 和 id
        const res = {
          // 姓名
          info: data[0].name,
          // 用户名
          username: data[0].username,
          // token
          token: data[0].token,
          // 权限等级
          permissions: data[0].permissions,
          // 个人id
          id: data[0].id,
          // 菜单表
          roles: data[0].menu.roles,
        }
        localStorage.setItem('loginInfo', JSON.stringify(res))
        dispatch(loginSuccessAction(res))
        message.success('登录成功！欢迎' + res.info + '来到栗子小店，3秒后跳转')
        setTimeout(() => {
          location.hash = '#/'
        }, 3000)
      }
    })
}
